new Vue({
    el: '#app',
    mixins: [Save],//组件配置文件，路径/utils/components.js
    data() {
        return {
            dataForm:{
                Code_Serial:'0', // 码流水号数值默认值为0
                Code_length: '',  // 码总长度
                Code_Seriallength: '' // 码流水号长度
            },
            childDataForm:[{}],
            tracecode_rules:[],
            tracecode_rules_detail:[],
            code_type:[],
            city: [],//地址
            type:'0',//0:可修改  1:只读
        }
    },
    mounted() {
        /**
         * 组件配置文件中自动执行方法
         * 1.this.init(); //初始化文件
         * 2.this.getData(); //仅修改时执行，根据BOM配置属性查询
         */
        this.getList();
    },
    methods: {
        getList() {//获取主数据           
            // 码段类型引用
            $.ajax({
                url: absolutepath() + 'admin/data/code_type.json',
                type: 'GET',
                success: (data) => {
                    this.code_type = data;
                },
            })
            
        },

    //判断码段类型
        // 处理码段类型变化
        handleCodeTypeChange(item, val) {
            item.Code_Type = val;
            
            // 根据不同的码段类型进行不同处理
            if (val === '防伪字符') {
                // 计算剩余可分配的长度
                this.generateRandomStringForAntiFake(item);
            } else if (val === '时间日期') {
                // 设置默认时间日期格式
                item.Code_Value = parseTime(new Date(), '{y}{m}{d}');
            } else if (val === '自定义字符串') {
                // 清空码段值，让用户自定义输入
                item.Code_Value = '';
            }            
            // 检查总长度
            this.checkTotalLength();
        },
            // 为防伪字符生成随机字符串
        generateRandomStringForAntiFake(item) {
            if (!this.dataForm.Code_length) {
                this.$message.warning('请先设置码总长度');
                return;
            }
            const totalLength = parseInt(this.dataForm.Code_length);
            const serialLength = parseInt(this.dataForm.Code_Seriallength || '0');            
            // 计算其他码段已占用的长度
            let usedLength = serialLength;
            this.childDataForm.forEach(segItem => {
                if (segItem !== item && segItem.Code_Value && segItem.Row_Status !== '1') {
                    usedLength += segItem.Code_Value.length;
                }
            });            
            // 计算防伪字符可占用的长度
            const availableLength = totalLength - usedLength;
            
            if (availableLength <= 0) {
                this.$message.warning('剩余长度不足，无法生成防伪字符');
                item.Code_Value = '';
                return;
            }           
            // 生成指定长度的随机字符串（字母数字混合）
            const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
            let result = '';
            for (let i = 0; i < availableLength; i++) {
                result += chars.charAt(Math.floor(Math.random() * chars.length));
            }            
            item.Code_Value = result;
        },

        
        // 处理码流水号长度变化
        CodeNumberLength(val) {
            if (val && !isNaN(val)) {
                // 确保码流水号数值不超过设置的长度
                const currentSerial = parseInt(this.dataForm.Code_Serial) || 0;
                const maxSerial = Math.pow(10, val) - 1;
                
                if (currentSerial > maxSerial) {
                    this.dataForm.Code_Serial = '0';
                    this.$message.warning('当前流水号数值超过设置的长度限制，已重置为0');
                } else {
                    // 格式化码流水号，确保长度符合要求
                    this.formatSerialNumber(val);
                }
            }
        },
        // 格式化码流水号
        formatSerialNumber(length) {
            const currentSerial = parseInt(this.dataForm.Code_Serial) || 0;
            this.dataForm.Code_Serial = currentSerial.toString().padStart(length, '0');
        },        
        // 检查码总长度
        checkTotalLength() {
            if (!this.dataForm.Code_length || !this.dataForm.Code_Seriallength) {
                return true;
            }            
            const totalLength = parseInt(this.dataForm.Code_length);
            const serialLength = parseInt(this.dataForm.Code_Seriallength);            
            // 检查码流水号长度是否小于等于码总长度
            if (serialLength > totalLength) {
                this.$message.warning('码流水号长度不能大于码总长度');
                return false;
            }            
            // 判断所有码段值的长度之和加上码流水号长度是否等于码总长度
            let segmentsLength = serialLength;
            this.childDataForm.forEach(item => {
                if (item.Code_Value && item.Row_Status !== '1') {
                    segmentsLength += item.Code_Value.length;
                }
            });            
            if (segmentsLength !== totalLength) {
                this.$message.warning('码段设置与总长度不符');
                return false;
            }            
            return true;
        },       
        // 处理码段值变化，检查长度是否符合要求
        onSegmentValueChange(item) {
            if (!this.dataForm.Code_length) {
                return;
            }            
            this.$nextTick(() => {
                this.checkTotalLength();
            });
        },
        
        // 提交表单前的验证
        beforeSubmit() {
            // 确保所有必要字段都已填写
            for (let item of this.childDataForm) {
                if (item.Row_Status !== '1') {
                    if (!item.Code_Type || !item.Code_Value) {
                        this.$message.warning('请完善所有码段信息');
                        return false;
                    }
                }
            }            
            if (!this.checkTotalLength()) {
                return false;
            }           
            return true;
        },
        
        // 格式化日期的辅助方法
        formatDate(date) {
            const year = date.getFullYear();
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const day = String(date.getDate()).padStart(2, '0');            
            return `${year}${month}${day}`;
        },
        
        // 验证
        async handleSubmit() {
            // 表单
            const allValid = await this.validateAllForms();
            if (allValid) {
                // 自定义
                if (!this.beforeSubmit()) {
                    return;
                }                
                this.loading = true;
                try {
                    const lJSONObject_DataSet = this.generateStructure();
                    httpRequest({
                        contentType: 'JSON',
                        url: '/generalBusiness/generalSaveByRequestBody',
                        data: JSON.stringify({
                            Data: lJSONObject_DataSet
                        })
                    }).then(res => {
                        if (res.Status == "success") {
                            this.$message.success("提交成功");
                            window.location.href = './index.html';
                        } else {
                            this.$message.error("提交失败，请重试！");
                        }
                    }).catch(xhr => {
                        this.$message.error("系统错误，请联系开发者!")
                    }).finally(() => {
                        this.loading = false;
                    })
                } catch (error) {
                    console.error(error);
                    this.$message.error("系统错误，请联系开发者!")
                    this.loading = false;
                }
            } else {
                this.$message({
                    message: '存在未填写的必填项！',
                    type: 'warning'
                });
            }
        }
    }
})